現代的 Rust 借助 函數式程式設計 原則來提供 零成本抽象。透過將函數視為值、資料視為不可變流,Rust 能夠實現富有表現力的 輸入/輸出操作 且不犧牲效能。
1. 環境與閉包
與標準函數不同,閉包可以 捕獲其環境。它們使用 Fn, FnMut或 FnOnce 特性來管理 閉包中的所有權轉移,以確保即使函數攜帶狀態時,記憶體安全也能得到維護。
let v1 = vec![1, 2, 3];
let v1_iter = v1.iter().map(|x| x + 1);
// v1_iter 是惰性的,尚未執行!
let v1_iter = v1.iter().map(|x| x + 1);
// v1_iter 是惰性的,尚未執行!
2. 宣告式管道
透過使用 迭代器適配器,開發者可將冗長的巢狀迴圈替換為簡潔的邏輯。 iter_mut 方法 允許進行安全的原地函數轉換,同時編譯器會將這些高階呼叫優化為與手寫迴圈相匹配的組合語言。
3. 性能基準測試
當在 開發設定檔 或釋出模式下編譯時, search 函數證明了其效率。統計基準測試顯示: test bench_search_iter ... 測試:19,234,900 納秒/次。這證實了這些抽象確實是零成本的。
⚠️ 編譯器警告
警告:未使用的 `Map` 必須被使用。迭代器是惰性的;除非被像
collect() 或 sum()這樣的消費方法調用,否則什麼都不會做。TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>